home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-M68K / AMIGAHW.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  11KB  |  336 lines

  1. /*
  2. ** asm-m68k/amigahw.h -- This header defines some macros and pointers for
  3. **                    the various Amiga custom hardware registers.
  4. **                    The naming conventions used here conform to those
  5. **                    used in the Amiga Hardware Reference Manual, 3rd Edition
  6. **
  7. ** Copyright 1992 by Greg Harp
  8. **
  9. ** This file is subject to the terms and conditions of the GNU General Public
  10. ** License.  See the file COPYING in the main directory of this archive
  11. ** for more details.
  12. **
  13. ** Created: 9/24/92 by Greg Harp
  14. */
  15.  
  16. #ifndef _M68K_AMIGAHW_H
  17. #define _M68K_AMIGAHW_H
  18.  
  19.     /*
  20.      *  Different Amiga models
  21.      */
  22.  
  23. extern unsigned long amiga_model;
  24.  
  25. #define AMI_UNKNOWN    (0)
  26. #define AMI_500        (1)
  27. #define AMI_500PLUS    (2)
  28. #define AMI_600        (3)
  29. #define AMI_1000    (4)
  30. #define AMI_1200    (5)
  31. #define AMI_2000    (6)
  32. #define AMI_2500    (7)
  33. #define AMI_3000    (8)
  34. #define AMI_3000T    (9)
  35. #define AMI_3000PLUS    (10)
  36. #define AMI_4000    (11)
  37. #define AMI_4000T    (12)
  38. #define AMI_CDTV    (13)
  39. #define AMI_CD32    (14)
  40. #define AMI_DRACO    (15)
  41.  
  42.  
  43.     /*
  44.      *  Chipsets
  45.      */
  46.  
  47. extern unsigned long amiga_chipset;
  48.  
  49. #define CS_STONEAGE    (0)
  50. #define CS_OCS        (1)
  51. #define CS_ECS        (2)
  52. #define CS_AGA        (3)
  53.  
  54.  
  55.     /*
  56.      *  Miscellaneous
  57.      */
  58.  
  59. extern unsigned long amiga_eclock;    /* 700 kHz E Peripheral Clock */
  60. extern unsigned long amiga_masterclock;    /* 28 MHz Master Clock */
  61. extern unsigned long amiga_colorclock;    /* 3.5 MHz Color Clock */
  62. extern unsigned long amiga_chip_size;    /* Chip RAM Size (bytes) */
  63. extern unsigned char amiga_vblank;    /* VBLANK Frequency */
  64. extern unsigned char amiga_psfreq;    /* Power Supply Frequency */
  65.  
  66.  
  67. #define AMIGAHW_DECLARE(name)    unsigned name : 1
  68. #define AMIGAHW_SET(name)    (amiga_hw_present.name = 1)
  69. #define AMIGAHW_PRESENT(name)    (amiga_hw_present.name)
  70.  
  71. struct amiga_hw_present {
  72.     /* video hardware */
  73.     AMIGAHW_DECLARE(AMI_VIDEO);        /* Amiga Video */
  74.     AMIGAHW_DECLARE(AMI_BLITTER);    /* Amiga Blitter */
  75.     AMIGAHW_DECLARE(AMBER_FF);        /* Amber Flicker Fixer */
  76.     /* sound hardware */
  77.     AMIGAHW_DECLARE(AMI_AUDIO);        /* Amiga Audio */
  78.     /* disk storage interfaces */
  79.     AMIGAHW_DECLARE(AMI_FLOPPY);    /* Amiga Floppy */
  80.     AMIGAHW_DECLARE(A3000_SCSI);    /* SCSI (wd33c93, A3000 alike) */
  81.     AMIGAHW_DECLARE(A4000_SCSI);    /* SCSI (ncr53c710, A4000T alike) */
  82.     AMIGAHW_DECLARE(A1200_IDE);        /* IDE (A1200 alike) */
  83.     AMIGAHW_DECLARE(A4000_IDE);        /* IDE (A4000 alike) */
  84.     AMIGAHW_DECLARE(CD_ROM);        /* CD ROM drive */
  85.     /* other I/O hardware */
  86.     AMIGAHW_DECLARE(AMI_KEYBOARD);    /* Amiga Keyboard */
  87.     AMIGAHW_DECLARE(AMI_MOUSE);        /* Amiga Mouse */
  88.     AMIGAHW_DECLARE(AMI_SERIAL);    /* Amiga Serial */
  89.     AMIGAHW_DECLARE(AMI_PARALLEL);    /* Amiga Parallel */
  90.     /* real time clocks */
  91.     AMIGAHW_DECLARE(A2000_CLK);        /* Hardware Clock (A2000 alike) */
  92.     AMIGAHW_DECLARE(A3000_CLK);        /* Hardware Clock (A3000 alike) */
  93.     /* supporting hardware */
  94.     AMIGAHW_DECLARE(CHIP_RAM);        /* Chip RAM */
  95.     AMIGAHW_DECLARE(PAULA);        /* Paula (8364) */
  96.     AMIGAHW_DECLARE(DENISE);        /* Denise (8362) */
  97.     AMIGAHW_DECLARE(DENISE_HR);        /* Denise (8373) */
  98.     AMIGAHW_DECLARE(LISA);        /* Lisa (8375) */
  99.     AMIGAHW_DECLARE(AGNUS_PAL);        /* Normal/Fat PAL Agnus (8367/8371) */
  100.     AMIGAHW_DECLARE(AGNUS_NTSC);    /* Normal/Fat NTSC Agnus (8361/8370) */
  101.     AMIGAHW_DECLARE(AGNUS_HR_PAL);    /* Fat Hires PAL Agnus (8372) */
  102.     AMIGAHW_DECLARE(AGNUS_HR_NTSC);    /* Fat Hires NTSC Agnus (8372) */
  103.     AMIGAHW_DECLARE(ALICE_PAL);        /* PAL Alice (8374) */
  104.     AMIGAHW_DECLARE(ALICE_NTSC);    /* NTSC Alice (8374) */
  105.     AMIGAHW_DECLARE(MAGIC_REKICK);    /* A3000 Magic Hard Rekick */
  106.     AMIGAHW_DECLARE(PCMCIA);        /* PCMCIA Slot */
  107.     AMIGAHW_DECLARE(ZORRO);        /* Zorro AutoConfig */
  108.     AMIGAHW_DECLARE(ZORRO3);        /* Zorro III */
  109. };
  110.  
  111. extern struct amiga_hw_present amiga_hw_present;
  112.  
  113. struct CUSTOM {
  114.     unsigned short bltddat;
  115.     unsigned short dmaconr;
  116.     unsigned short vposr;
  117.     unsigned short vhposr;
  118.     unsigned short dskdatr;
  119.     unsigned short joy0dat;
  120.     unsigned short joy1dat;
  121.     unsigned short clxdat;
  122.     unsigned short adkconr;
  123.     unsigned short pot0dat;
  124.     unsigned short pot1dat;
  125.     unsigned short potgor;
  126.     unsigned short serdatr;
  127.     unsigned short dskbytr;
  128.     unsigned short intenar;
  129.     unsigned short intreqr;
  130.     unsigned char  *dskptr;
  131.     unsigned short dsklen;
  132.     unsigned short dskdat;
  133.     unsigned short refptr;
  134.     unsigned short vposw;
  135.     unsigned short vhposw;
  136.     unsigned short copcon;
  137.     unsigned short serdat;
  138.     unsigned short serper;
  139.     unsigned short potgo;
  140.     unsigned short joytest;
  141.     unsigned short strequ;
  142.     unsigned short strvbl;
  143.     unsigned short strhor;
  144.     unsigned short strlong;
  145.     unsigned short bltcon0;
  146.     unsigned short bltcon1;
  147.     unsigned short bltafwm;
  148.     unsigned short bltalwm;
  149.     unsigned char  *bltcpt;
  150.     unsigned char  *bltbpt;
  151.     unsigned char  *bltapt;
  152.     unsigned char  *bltdpt;
  153.     unsigned short bltsize;
  154.     unsigned char  pad2d;
  155.     unsigned char  bltcon0l;
  156.     unsigned short bltsizv;
  157.     unsigned short bltsizh;
  158.     unsigned short bltcmod;
  159.     unsigned short bltbmod;
  160.     unsigned short bltamod;
  161.     unsigned short bltdmod;
  162.     unsigned short spare2[4];
  163.     unsigned short bltcdat;
  164.     unsigned short bltbdat;
  165.     unsigned short bltadat;
  166.     unsigned short spare3[3];
  167.     unsigned short deniseid;
  168.     unsigned short dsksync;
  169.     unsigned short *cop1lc;
  170.     unsigned short *cop2lc;
  171.     unsigned short copjmp1;
  172.     unsigned short copjmp2;
  173.     unsigned short copins;
  174.     unsigned short diwstrt;
  175.     unsigned short diwstop;
  176.     unsigned short ddfstrt;
  177.     unsigned short ddfstop;
  178.     unsigned short dmacon;
  179.     unsigned short clxcon;
  180.     unsigned short intena;
  181.     unsigned short intreq;
  182.     unsigned short adkcon;
  183.     struct {
  184.     unsigned short    *audlc;
  185.     unsigned short audlen;
  186.     unsigned short audper;
  187.     unsigned short audvol;
  188.     unsigned short auddat;
  189.     unsigned short audspare[2];
  190.     } aud[4];
  191.     unsigned char  *bplpt[8];
  192.     unsigned short bplcon0;
  193.     unsigned short bplcon1;
  194.     unsigned short bplcon2;
  195.     unsigned short bplcon3;
  196.     unsigned short bpl1mod;
  197.     unsigned short bpl2mod;
  198.     unsigned short bplcon4;
  199.     unsigned short clxcon2;
  200.     unsigned short bpldat[8];
  201.     unsigned char  *sprpt[8];
  202.     struct {
  203.     unsigned short pos;
  204.     unsigned short ctl;
  205.     unsigned short dataa;
  206.     unsigned short datab;
  207.     } spr[8];
  208.     unsigned short color[32];
  209.     unsigned short htotal;
  210.     unsigned short hsstop;
  211.     unsigned short hbstrt;
  212.     unsigned short hbstop;
  213.     unsigned short vtotal;
  214.     unsigned short vsstop;
  215.     unsigned short vbstrt;
  216.     unsigned short vbstop;
  217.     unsigned short sprhstrt;
  218.     unsigned short sprhstop;
  219.     unsigned short bplhstrt;
  220.     unsigned short bplhstop;
  221.     unsigned short hhposw;
  222.     unsigned short hhposr;
  223.     unsigned short beamcon0;
  224.     unsigned short hsstrt;
  225.     unsigned short vsstrt;
  226.     unsigned short hcenter;
  227.     unsigned short diwhigh;
  228.     unsigned short spare4[11];
  229.     unsigned short fmode;
  230. };
  231.  
  232. /*
  233.  * DMA register bits
  234.  */
  235. #define DMAF_SETCLR        (0x8000)
  236. #define DMAF_AUD0        (0x0001)
  237. #define DMAF_AUD1        (0x0002)
  238. #define DMAF_AUD2        (0x0004)
  239. #define DMAF_AUD3        (0x0008)
  240. #define DMAF_DISK        (0x0010)
  241. #define DMAF_SPRITE        (0x0020)
  242. #define DMAF_BLITTER        (0x0040)
  243. #define DMAF_COPPER        (0x0080)
  244. #define DMAF_RASTER        (0x0100)
  245. #define DMAF_MASTER        (0x0200)
  246. #define DMAF_BLITHOG        (0x0400)
  247. #define DMAF_BLTNZERO        (0x2000)
  248. #define DMAF_BLTDONE        (0x4000)
  249. #define DMAF_ALL        (0x01FF)
  250.  
  251. struct CIA {
  252.     unsigned char pra;         char pad0[0xff];
  253.     unsigned char prb;         char pad1[0xff];
  254.     unsigned char ddra;        char pad2[0xff];
  255.     unsigned char ddrb;        char pad3[0xff];
  256.     unsigned char talo;        char pad4[0xff];
  257.     unsigned char tahi;        char pad5[0xff];
  258.     unsigned char tblo;        char pad6[0xff];
  259.     unsigned char tbhi;        char pad7[0xff];
  260.     unsigned char todlo;    char pad8[0xff];
  261.     unsigned char todmid;    char pad9[0xff];
  262.     unsigned char todhi;    char pada[0x1ff];
  263.     unsigned char sdr;         char padb[0xff];
  264.     unsigned char icr;         char padc[0xff];
  265.     unsigned char cra;         char padd[0xff];
  266.     unsigned char crb;         char pade[0xff];
  267. };
  268.  
  269. #define zTwoBase (0x80000000)
  270. #define ZTWO_PADDR(x) (((unsigned long)(x))-zTwoBase)
  271. #define ZTWO_VADDR(x) (((unsigned long)(x))+zTwoBase)
  272.  
  273. #define CUSTOM_PHYSADDR     (0xdff000)
  274. #define custom ((*(volatile struct CUSTOM *)(zTwoBase+CUSTOM_PHYSADDR)))
  275.  
  276. #define CIAA_PHYSADDR      (0xbfe001)
  277. #define CIAB_PHYSADDR      (0xbfd000)
  278. #define ciaa   ((*(volatile struct CIA *)(zTwoBase + CIAA_PHYSADDR)))
  279. #define ciab   ((*(volatile struct CIA *)(zTwoBase + CIAB_PHYSADDR)))
  280.  
  281. #define CHIP_PHYSADDR        (0x000000)
  282. #define chipaddr ((unsigned long)(zTwoBase + CHIP_PHYSADDR))
  283. void amiga_chip_init (void);
  284. void *amiga_chip_alloc (long size);
  285. void amiga_chip_free (void *);
  286. unsigned long amiga_chip_avail( void ); /*MILAN*/
  287.  
  288. struct tod3000 {
  289.   unsigned int  :28, second2:4;    /* lower digit */
  290.   unsigned int  :28, second1:4;    /* upper digit */
  291.   unsigned int  :28, minute2:4;    /* lower digit */
  292.   unsigned int  :28, minute1:4;    /* upper digit */
  293.   unsigned int  :28, hour2:4;    /* lower digit */
  294.   unsigned int  :28, hour1:4;    /* upper digit */
  295.   unsigned int  :28, weekday:4;
  296.   unsigned int  :28, day2:4;    /* lower digit */
  297.   unsigned int  :28, day1:4;    /* upper digit */
  298.   unsigned int  :28, month2:4;    /* lower digit */
  299.   unsigned int  :28, month1:4;    /* upper digit */
  300.   unsigned int  :28, year2:4;    /* lower digit */
  301.   unsigned int  :28, year1:4;    /* upper digit */
  302.   unsigned int  :28, cntrl1:4;    /* control-byte 1 */
  303.   unsigned int  :28, cntrl2:4;    /* control-byte 2 */  
  304.   unsigned int  :28, cntrl3:4;    /* control-byte 3 */
  305. };
  306. #define TOD3000_CNTRL1_HOLD    0
  307. #define TOD3000_CNTRL1_FREE    9
  308. #define TOD_3000 ((struct tod3000 *)(zTwoBase+0xDC0000))
  309.  
  310. struct tod2000 {
  311.   unsigned int  :28, second2:4;    /* lower digit */
  312.   unsigned int  :28, second1:4;    /* upper digit */
  313.   unsigned int  :28, minute2:4;    /* lower digit */
  314.   unsigned int  :28, minute1:4;    /* upper digit */
  315.   unsigned int  :28, hour2:4;    /* lower digit */
  316.   unsigned int  :28, hour1:4;    /* upper digit */
  317.   unsigned int  :28, day2:4;    /* lower digit */
  318.   unsigned int  :28, day1:4;    /* upper digit */
  319.   unsigned int  :28, month2:4;    /* lower digit */
  320.   unsigned int  :28, month1:4;    /* upper digit */
  321.   unsigned int  :28, year2:4;    /* lower digit */
  322.   unsigned int  :28, year1:4;    /* upper digit */
  323.   unsigned int  :28, weekday:4;
  324.   unsigned int  :28, cntrl1:4;    /* control-byte 1 */
  325.   unsigned int  :28, cntrl2:4;    /* control-byte 2 */  
  326.   unsigned int  :28, cntrl3:4;    /* control-byte 3 */
  327. };
  328.  
  329. #define TOD2000_CNTRL1_HOLD    (1<<0)
  330. #define TOD2000_CNTRL1_BUSY    (1<<1)
  331. #define TOD2000_CNTRL3_24HMODE    (1<<2)
  332. #define TOD2000_HOUR1_PM    (1<<2)
  333. #define TOD_2000 ((struct tod2000 *)(zTwoBase+0xDC0000))
  334.  
  335. #endif /* _M68K_AMIGAHW_H */
  336.